#include <chrono>
#include <future>
#include <iostream>
#include <thread>
using namespace std;

int aysnc_fun(int n)
{
    int id = n;
    while (n > 0) {
        std::this_thread::sleep_for(std::chrono::seconds(1));
        cout << "id:" << id << " running " << n << endl;
        n--;
    }
    return n;
}

int main()
{
    // 启动两个异步任务，分别计算斐波那契数列的第10项和第20项
    std::future<int> fib10 = std::async(std::launch::async, aysnc_fun, 10);
    std::future<int> fib20 = std::async(std::launch::async, aysnc_fun, 20);

    std::cout << "异步任务已启动，主线程继续执行其他操作..." << std::endl;

    // 在适当的时候获取异步任务结果（此处为模拟其他操作后的简单延时）
    std::this_thread::sleep_for(std::chrono::seconds(1));

    // 获取并输出斐波那契数列的第10项和第20项
    cout << "start-------" << endl;
    std::cout << "斐波那契数列的第10项为：" << fib10.get() << std::endl;
    cout << "middle-------" << endl;
    std::cout << "斐波那契数列的第20项为：" << fib20.get() << std::endl;
	cout << "end-------" << endl;

    return 0;
}

/*
aynsc gdb调试为多线程, 异步执行
*/